package com.qingxin.sys.verifier;

import java.util.Map;

/**
 * 预定义正则表达式
 * <br>
 * @author JiWangli
 */
public class RegExps {
	private static LockedHashtable<String, String> REGEXP_MAP = new LockedHashtable<String, String>();
	private static LockedHashtable<String, String> REGEXP_ERROR = new LockedHashtable<String, String>();

	static{
		REGEXP_MAP.put("int", "^(0|-?[1-9]\\d*)$");//整数
		REGEXP_MAP.put("int1", "^(0|[1-9]\\d*)$");//正整数+0
		REGEXP_MAP.put("int2", "^(0|-[1-9]\\d*)$");//负整数+0
		REGEXP_MAP.put("int3", "^([1-9]\\d*)$");//正整数
		REGEXP_MAP.put("int4", "^(-[1-9]\\d*)$");//负整数
		REGEXP_MAP.put("num", "^-?\\d+(\\.\\d+)?$");//数字
		REGEXP_MAP.put("num1", "^\\d+(\\.\\d+)?$");//正数（正数 + 0）
		REGEXP_MAP.put("num2", "^-\\d+(\\.\\d+)?$");//负数（负数 + 0）
		REGEXP_MAP.put("email", "^\\w[-.\\w]*@[-\\w]+(\\.[\\w]+)+$");//邮件
		REGEXP_MAP.put("emailGroup", "^\\w[-.\\w]*@[-\\w]+(\\.[\\w]+)+(;\\w[-.\\w]*@[-\\w]+(\\.[\\w]+)+)$");
		REGEXP_MAP.put("url", "^\\w+://\\w[-.\\w]*(:\\d{1,5})?(/.*)?$");
		REGEXP_MAP.put("chinese", "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$");//汉字
		REGEXP_MAP.put("ascii", "^[\\x00-\\xFF]+$");//ASCII
		REGEXP_MAP.put("zipcode", "^\\d{6}$");//邮政编码
		REGEXP_MAP.put("mobile", "^(1[0-9]{10})$");//手机
		REGEXP_MAP.put("mobileGroup", "^(1[0-9]{10})(;1[0-9]{10})*$");
		REGEXP_MAP.put("ip4", "^(25[0-5]|2[0-4]\\d|[01]\\d{2}|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|[01]\\d{2}|[1-9]?\\d)){3}$");
		REGEXP_MAP.put("idcard", "^[1-9](\\d{14}|\\d{16}[\\dX])$");
		REGEXP_MAP.put("tel", "^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$");//电话号码的函数(包括验证国内区号,国际区号,分机号)
		REGEXP_MAP.put("mobiletel", "^((1[0-9]{10})|(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?)$");
		REGEXP_MAP.put("letter", "^[A-Za-z]$");
		REGEXP_MAP.put("digit", "^\\d+$");
		REGEXP_MAP.put("word", "^[0-9A-Za-z_]+$");
		REGEXP_MAP.put("word2", "^[0-9A-Za-z]+$");
		REGEXP_MAP.put("date", "^[\\d]{4}-((0?[13578]|10|12)-(0?[1-9]|[12][\\d]|3[01])|(0?[4689]|11)-(0?[1-9]|[12][\\d]|30)|0?2-(0?[1-9]|1[\\d]|2[0-9]))$");
		REGEXP_MAP.put("time", "^(0?[\\d]|1[\\d]|2[0-3])(:(0?[\\d]|[1-5][\\d])){2}$");
		REGEXP_MAP.put("datetime", "^[\\d]{4}-((0?[13578]|10|12)-(0?[1-9]|[12][\\d]|3[01])|(0?[4689]|11)-(0?[1-9]|[12][\\d]|30)|0?2-(0?[1-9]|1[\\d]|2[0-9]))(\u0020)(0?[\\d]|1[\\d]|2[0-3])(:(0?[\\d]|[1-5][\\d])){2}$");
		REGEXP_MAP.put("hex", "^[0-9A-Fa-f]$");//十六进制
		REGEXP_MAP.put("color", "^#?[0-9A-Fa-f]{6}$");//颜色
		REGEXP_MAP.put("required", "^[\\s\\S]*[^\\s\u3000]+[\\s\\S]*$");//非空白，即必须包含非空白字符
		REGEXP_MAP.put("notblank", "^[\\s\\S]*[^\\s\u3000]+[\\s\\S]*$");//非空白，即必须包含非空白字符
		
		REGEXP_MAP.setLocked(true);
		
		
		REGEXP_ERROR.put("int", "必须是整数");
		REGEXP_ERROR.put("int1", "必须是正整数或0");
		REGEXP_ERROR.put("int2", "必须是负整数或0");
		REGEXP_ERROR.put("int3", "必须是正整数");
		REGEXP_ERROR.put("int4", "必须是负整数");
		REGEXP_ERROR.put("num", "必须是数字");
		REGEXP_ERROR.put("num1", "必须是正数或0");
		REGEXP_ERROR.put("num2", "必须是负数或0");
		REGEXP_ERROR.put("email", "邮箱地址格式错误");
		REGEXP_ERROR.put("emailGroup", "邮箱地址格式错误");
		REGEXP_ERROR.put("url", "URL格式错误");
		REGEXP_ERROR.put("chinese", "必须是汉字");
		REGEXP_ERROR.put("ascii", "必须是ASCII字符");
		REGEXP_ERROR.put("zipcode", "邮政编码格式错误");
		REGEXP_ERROR.put("mobile", "手机号格式错误");
		REGEXP_ERROR.put("mobileGroup", "手机号格式错误");
		REGEXP_ERROR.put("ip4", "IP地址格式错误");
		REGEXP_ERROR.put("idcard", "身份证号格式错误");
		REGEXP_ERROR.put("tel", "电话号码格式错误");
		REGEXP_ERROR.put("mobiletel", "电话号码格式错误");
		REGEXP_ERROR.put("letter", "必须由英文字母组成");
		REGEXP_ERROR.put("digit", "必须由数字组成");
		REGEXP_ERROR.put("word", "必须由英文字母、数字或下划线组成");
		REGEXP_ERROR.put("word2", "必须由英文字母和数字组成");
		REGEXP_ERROR.put("date", "日期格式错误");
		REGEXP_ERROR.put("time", "时间格式错误");
		REGEXP_ERROR.put("datetime", "日期时间格式错误");
		REGEXP_ERROR.put("hex", "必须由数字和字母ABCDEF组成");
		REGEXP_ERROR.put("color", "颜色值格式错误");
		REGEXP_ERROR.put("required", "不能为空");
		REGEXP_ERROR.put("notblank", "不能为空");
		
		REGEXP_ERROR.setLocked(true);
	}
	
	
	public static String getRegExp(String name) {
		return REGEXP_MAP.get(name);
	}
	
	
	public static String getRegExpErrorMsg(String name){
		return REGEXP_ERROR.get(name);
	}
	
	
	public static Map<String, String> getRegexpMap(){
		return REGEXP_MAP;
	}
	
	
	public static Map<String, String> getRegexpErrorMap(){
		return REGEXP_ERROR;
	}
	
	
}
